#!/bin/bash
#
# 脚本用途：清零 Linux 虚拟机中未使用的磁盘空间，从而压缩磁盘文件体积
# 来源：
#   - https://github.com/vmware
#   - https://kb.vmware.com/s/article/1001934

# -----------------------------------------------------------------------------
# 1. 检查是否在 VMware 虚拟机环境中运行
#
# 通过 dmidecode 命令读取系统产品名称，
# 如果返回值不是 "VMware Virtual Platform"，则退出脚本。
# -----------------------------------------------------------------------------
machine_type=$(sudo dmidecode --string system-product-name)
if [ "$machine_type" != "VMware Virtual Platform" ]; then
  echo "错误：该脚本仅能在 VMware 虚拟机上运行！"
  exit 1
fi

# -----------------------------------------------------------------------------
# 2. 更新系统软件包并清理无用文件以释放磁盘空间
#
# 执行以下操作：
#   - apt-get update：更新软件包列表
#   - apt-get dist-upgrade：升级系统中的所有软件包
#   - apt-get autoremove：删除不再需要的软件包
#   - apt-get autoclean：清除下载的旧软件包文件
# -----------------------------------------------------------------------------
echo "正在更新软件包和清理系统..."
sudo sh -c "apt-get -y update; apt-get -y dist-upgrade; apt-get -y autoremove; apt-get -y autoclean"

# -----------------------------------------------------------------------------
# 3. （可选）安装 VMware Tools 或 open-vm-tools
#
# 如果当前系统尚未安装必要的 VMware 工具，可取消下行注释进行安装
# -----------------------------------------------------------------------------
# sudo apt-get install -y open-vm-tools open-vm-tools-desktop

# -----------------------------------------------------------------------------
# 4. 获取虚拟磁盘列表并对每个磁盘执行清零操作
#
# 通过 vmware-toolbox-cmd disk list 命令列出所有虚拟磁盘，
# 然后遍历列表，对每个磁盘调用 vmware-toolbox-cmd disk wipe 命令清零未使用空间。
# -----------------------------------------------------------------------------
echo "获取虚拟磁盘列表..."
disk_list=$(sudo vmware-toolbox-cmd disk list)
echo "开始清零磁盘..."
for disk in $disk_list; do
  echo "正在清零磁盘：$disk"
  sudo vmware-toolbox-cmd disk wipe "$disk"
done

# -----------------------------------------------------------------------------
# 5. 收缩所有虚拟磁盘
#
# 通过 vmware-toolbox-cmd disk shrinkonly 命令压缩磁盘，
# 将清零操作后产生的空间回收，以减少磁盘文件占用的物理空间。
# -----------------------------------------------------------------------------
echo "正在收缩磁盘..."
sudo vmware-toolbox-cmd disk shrinkonly

# -----------------------------------------------------------------------------
# 6. 操作完成后关闭虚拟机
#
# 调用 shutdown 命令关闭系统，以确保所有操作已正确应用。
# -----------------------------------------------------------------------------
echo "操作完成，系统将立即关机..."
sudo shutdown -h now

